package method;


/**
 * @author DCSGO
 * @version 1.0
 * 用户线程和守护线程
 */
/*
1.用户线程: 也叫工作线程 会在线程的任务执行完或被通知结束时结束
2.守护线程: 一般是为工作线程服务的 当所有的用户线程结束 守护线程自动结束
3.常见的守护线程: 垃圾回收机制
 */
public class Method03 {
    public static void main(String[] args) throws InterruptedException {
        DaemonThread daemonThread = new DaemonThread();
        //daemonThread 设置为守护线程
        //必须在启动线程前进行设置 否则将会抛出 IllegalThreadStateException 非法的线程状态异常
        //且该线程依旧是用户线程
        daemonThread.setDaemon(true);
        daemonThread.start();
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
            Thread.sleep(1000);
        }
        /*
         * main 0
         * Thread-0 1
         * main 1
         * Thread-0 2
         * main 2
         * Thread-0 3
         * main 3
         * Thread-0 4
         * main 4
         * Thread-0 5
         * Thread-0 6
         *
         * 进程已结束，退出代码为 0
         */
        //main 结束后 Thread-0 也随之结束
    }
}

class DaemonThread extends Thread {
    @Override
    public void run() {
        int i = 1;
        while (true) {
            System.out.println(currentThread().getName() + " " + (i++));
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
